/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grest.controller;

import grest.model.DataIO;
import grest.model.Entidad;
import grest.model.Pedido;
import grest.model.Productos;
import grest.model.TableModelABM;
import grest.view.FormMozos;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import javax.swing.JTable;
import grest.model.ViewGeneral;
import grest.view.VistaBusqueda;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Observer;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.Timer;
/**
 *
 * @author santiago
 */
public class CntrlrFormMozos implements ActionListener,Observer{
    private FormMozos form;
    private JTable tablaMesas;
    private TableModelABM tModelMesas=null;
    private JTable tablaPedidos=null;
    private TableModelABM tModelPedidos=null;
    private Integer idProducto;
    private Integer cantidad;
    private Double precio;
    private Integer idMov;
    private Integer nro_mozo;
    
    public CntrlrFormMozos(FormMozos form){
        this.form=form;
        this.tablaPedidos=(JTable)form.getControls("tblPedidos");
        this.tablaMesas=(JTable)form.getControls("tblMesas");
        tModelPedidos=new TableModelABM(new Pedido());
        tablaMesas.setModel(tModelPedidos);
        tModelMesas =  new TableModelABM(new ViewGeneral(1));
        tablaMesas.setModel(tModelMesas);
        Timer timer = new Timer (30000 , new ActionListener ()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                refresh();
             }
         });
        timer.start();
    }
        
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==form.getControls("btnRefreshPedidos")){
            this.refresh();
        }
        else if (e.getSource()==form.getControls("btnBuscar")){
            this.buscarProducto();
        }
        else if(e.getSource()==form.getControls("txtNroMozo")){
            //System.out.print("hola");
        }
        else if (e.getSource()==form.getControls("btnGuardar")){
            try{   
                this.getData();
                this.guardarPedido();
                this.tModelPedidos.fireTableDataChanged();
            }catch(Exception ex){
               JOptionPane.showMessageDialog(this.form, ex.getMessage(), ex.getCause().getMessage(), JOptionPane.ERROR_MESSAGE);                
            }
        }else if (e.getSource()==form.getControls("btnBuscar")){
            this.buscarProducto();
        };
 
    }
      
    public void refresh(){
        filtrarMesas(form.getMozoActual());
    }
   
    
  public void guardarPedido() throws SQLException{
        String query = "INSERT INTO T_PEDIDOS VALUES("+this.nro_mozo+","+this.idMov+",'TODAY','NOW',"+this.idProducto+","+this.cantidad+","+this.precio+");";
        System.out.print(query);
        DataIO.executeQuery(query);
        DataIO.doCommit();
        Pedido p = new Pedido();
        p.setIdMovimiento(this.idMov);
        p.setNroMozo(this.nro_mozo);
        p.setPrecio(this.precio);
        p.setProducto(this.idProducto);
        ResultSet rs = DataIO.getResultSet("SELECT DESCRIPCION FROM T_PRODUCTOS WHERE ID_PRODUCTO="+this.idProducto);
        rs.next();
        p.setDescrPro(rs.getString("DESCRIPCION"));
        p.setCantidad(this.cantidad);
        this.tModelPedidos = (TableModelABM)((JTable)form.getControls("tblPedidos")).getModel();
        this.tModelPedidos.getModel().add(p);
    }
  
    public void filtrarMesas(Integer nroMozo){
        tModelMesas =  new TableModelABM(new ViewGeneral(nroMozo));
        tablaMesas.setModel(tModelMesas);
    }
    public void getData() throws Exception{
        if(((JTextField) form.getControls("txtID")).getText().length()>0)
            this.idProducto = Integer.parseInt(((JTextField) form.getControls("txtID")).getText());
         else
             throw new Exception("Debe establecer el id de producto", new Throwable("No hay definida un id de producto"));
        if(((JTextField) form.getControls("txtCantidad")).getText().length()>0)
            this.cantidad = Integer.parseInt(((JTextField) form.getControls("txtCantidad")).getText());
         else
             throw new Exception("Debe establecer la cantidad", new Throwable("No hay definida una cantidad"));
        if(((JTextField) form.getControls("txtPrecio")).getText().length()>0)
            this.precio = Double.parseDouble(((JTextField) form.getControls("txtPrecio")).getText());
         else
             throw new Exception("Debe establecer la cantidad", new Throwable("No hay definida una cantidad"));
        this.nro_mozo = form.getMozoActual();
        Integer fila = tablaMesas.getSelectedRow();
        if (fila != -1){
           List<Entidad> arrayV =  tModelMesas.getModel();
           this.idMov =  ((ViewGeneral) arrayV.get(fila)).getNroMov();
        }
        else
            throw new Exception("Debe seleccionar una fila en la tabla de mesas", new Throwable("No se ha seleccionado una fila en la tabla de mesas"));
    }

    @Override
    public void update(Observable o, Object arg) {
            if (arg instanceof Productos){
                ((JTextField) form.getControls("txtID")).setText(String.valueOf(((Productos)arg).getId()));
                ((JTextField) form.getControls("txtPrecio")).setText(String.valueOf(((Productos)arg).getPrecio()));
                ((JLabel) form.getControls("lblDescripcion")).setText(String.valueOf(((Productos)arg).getDesc()));
                ((JTextField) form.getControls("txtID")).transferFocus();
            }
        }


    public void buscarProducto(){
        VistaBusqueda v = new VistaBusqueda(new Productos(),this);
    }


}
